home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / JR.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  4.0 KB  |  216 lines

  1. *******************************************************
  2. **      XFD external decruncher for JR Cruncher      **
  3. **        written by Mr. Larmer / Wanted Team        **
  4. **       shortened and fixed by SDI in 1999           **
  5. *******************************************************
  6.  
  7.         INCLUDE    "AINCLUDE:IncDirs.i"
  8.         INCLUDE    "libraries/xfdmaster.i"
  9.         INCLUDE    "lvo.i"
  10.  
  11.         * head function for tests
  12. *        INCLUDE    "xfdExeHead.a"
  13.  
  14. ; xfdForeman structure MUST be first thing in all external decrunchers
  15.  
  16. ForeMan        moveq    #-1,d0        ;security
  17.         rts
  18.         dc.l    XFDF_ID        ;id
  19.         dc.w    1        ;version
  20.         dc.w    0
  21.         dc.l    0,0        ;private
  22.         dc.l    S_JR        ;first slave
  23.  
  24. **************************************************
  25.  
  26.         dc.b    "$VER: JR 2.0 (25.07.1999)",0
  27. N_JR        dc.b    "(JR) Data Cruncher",0
  28.         EVEN
  29.  
  30. **************************************************
  31.  
  32. ; xfdSlave structure: this one doesn't support segment decrunching
  33.  
  34. S_JR        dc.l    0        ;no more slaves
  35.         dc.w    2        ;version
  36.         dc.w    39        ;master version
  37.         dc.l    N_JR        ;name
  38.         dc.w    XFDPFF_DATA|XFDPFF_USERTARGET|XFDPFF_RECOGLEN
  39.         dc.w    0
  40.         dc.l    RB_JR        ;recog buffer
  41.         dc.l    DB_JR        ;decrunch buffer
  42.         dc.l    0        ;recog segment
  43.         dc.l    0        ;decrunch segment
  44.         dc.w    0,0
  45.         dc.l    12+2
  46.  
  47. ;-------------------------------------------------
  48.  
  49. ; Recog buffer function: receives buffer + length in a0/d0
  50.  
  51. RB_JR        MOVEQ    #0,D0
  52.         CMP.W    #"JR",(A0)
  53.         BNE.B    .Exit
  54.         TST.B    4(A0)
  55.         BNE.B    .Exit
  56.         MOVE.L    4(A0),D0
  57.         MOVE.L    D0,xfdrr_FinalTargetLen(A1)
  58.         MOVE.L    D0,xfdrr_MinTargetLen(A1)
  59.         MOVEQ    #1,D0
  60. .Exit        RTS
  61.  
  62. ;-------------------------------------------------
  63.  
  64. ;Decrunch buffer function: receives bufferinfo in a0
  65.  
  66. * this functions uses D0-D2,A0-A2
  67.  
  68. DB_JR        MOVEM.L    D2/A2-A5,-(A7)
  69.         MOVE.L    A0,A5
  70.         MOVE.L    xfdbi_UserTargetBuf(A5),A1
  71.         MOVE.L    xfdbi_SourceBuffer(A5),A0
  72.         MOVE.L    A1,A3
  73.         ADD.L    xfdbi_TargetBufSaveLen(A5),A3
  74.  
  75.         moveq    #7,D2
  76. .JR_01        move.b    (A0)+,D1
  77.         dbra    D2,.JR_01
  78.         moveq    #-$80,D2
  79.         bra.w    .JR_18
  80.  
  81. .JR_02        lsr.w    #1,D1
  82.         subq.w    #1,D1
  83. .JR_03        add.b    D2,D2
  84.         bne.b    .JR_04
  85.         move.b    (A0)+,D2
  86.         addx.b    D2,D2
  87. .JR_04        addx.w    D0,D0
  88.         dbra    D1,.JR_03
  89.         moveq    #3,D1
  90.         add.w    D0,D1
  91.         add.w    D1,D1
  92.         LEA    (A1,D1.W),A4    *
  93.         ADD.W    D1,A4        *
  94.         CMP.L    A3,A4        *
  95.         BHI.W    .Err        * test copy
  96.         subq.w    #1,D1
  97. .JR_05        move.b    (A0)+,(A1)+
  98.         move.b    (A0)+,(A1)+
  99.         dbra    D1,.JR_05
  100.         bra.w    .JR_21
  101.  
  102. .JR_06        add.b    D2,D2
  103.         bne.b    .JR_07
  104.         move.b    (A0)+,D2
  105.         addx.b    D2,D2
  106. .JR_07        addx.w    D1,D1
  107.         add.b    D2,D2
  108.         bne.b    .JR_08
  109.         move.b    (A0)+,D2
  110.         addx.b    D2,D2
  111. .JR_08        bcc.b    .JR_10
  112.         subq.w    #1,D1
  113.         add.b    D2,D2
  114.         bne.b    .JR_09
  115.         move.b    (A0)+,D2
  116.         addx.b    D2,D2
  117. .JR_09        addx.w    D1,D1
  118.         cmpi.b    #9,D1
  119.         beq.b    .JR_02
  120. .JR_10        add.b    D2,D2
  121.         bne.b    .JR_11
  122.         move.b    (A0)+,D2
  123.         addx.b    D2,D2
  124. .JR_11        bcc.b    .JR_16
  125.         add.b    D2,D2
  126.         bne.b    .JR_12
  127.         move.b    (A0)+,D2
  128.         addx.b    D2,D2
  129. .JR_12        addx.w    D0,D0
  130.         add.b    D2,D2
  131.         bne.b    .JR_13
  132.         move.b    (A0)+,D2
  133.         addx.b    D2,D2
  134. .JR_13        bcs.b    .JR_27
  135.         tst.w    D0
  136.         bne.b    .JR_16
  137.         addq.w    #1,D0
  138. .JR_14        add.b    D2,D2
  139.         bne.b    .JR_15
  140.         move.b    (A0)+,D2
  141.         addx.b    D2,D2
  142. .JR_15        addx.w    D0,D0
  143. .JR_16        rol.w    #8,D0
  144.         move.b    (A0)+,D0
  145.         movea.l    A1,A2
  146.         suba.w    D0,A2
  147.         subq.w    #1,A2
  148.         LEA    (A1,D1.W),A4    *
  149.         CMP.L    A3,A4        * test copy
  150.         BHI.B    .Err
  151.         subq.w    #1,D1
  152. .JR_17        move.b    (A2)+,(A1)+
  153.         dbra    D1,.JR_17
  154.         bra.b    .JR_21
  155.  
  156. .JR_18        add.b    D2,D2
  157.         bne.b    .JR_19
  158.         move.b    (A0)+,D2
  159.         addx.b    D2,D2
  160. .JR_19        bcs.b    .JR_23
  161. .JR_20        CMP.L    A3,A1
  162.         BHS.B    .Err        * test copy
  163.         move.b    (A0)+,(A1)+
  164. .JR_21        add.b    D2,D2
  165.         bne.b    .JR_22
  166.         move.b    (A0)+,D2
  167.         addx.b    D2,D2
  168. .JR_22        bcc.b    .JR_20
  169. .JR_23        moveq    #2,D1
  170.         moveq    #0,D0
  171.         add.b    D2,D2
  172.         bne.b    .JR_24
  173.         move.b    (A0)+,D2
  174.         addx.b    D2,D2
  175. .JR_24        bcc.w    .JR_06
  176.         add.b    D2,D2
  177.         bne.b    .JR_25
  178.         move.b    (A0)+,D2
  179.         addx.b    D2,D2
  180. .JR_25        bcc.b    .JR_16
  181.         addq.w    #1,D1
  182.         add.b    D2,D2
  183.         bne.b    .JR_26
  184.         move.b    (A0)+,D2
  185.         addx.b    D2,D2
  186. .JR_26        bcc.w    .JR_10
  187.         move.b    (A0)+,D1
  188.         beq.b    .End
  189.         addq.w    #8,D1
  190.         bra.w    .JR_10
  191.  
  192. .JR_27        add.b    D2,D2
  193.         bne.b    .JR_28
  194.         move.b    (A0)+,D2
  195.         addx.b    D2,D2
  196. .JR_28        addx.w    D0,D0
  197.         ori.w    #4,D0
  198.         add.b    D2,D2
  199.         bne.b    .JR_29
  200.         move.b    (A0)+,D2
  201.         addx.b    D2,D2
  202. .JR_29        bcs.b    .JR_16
  203.         bra.w    .JR_14
  204.  
  205. .End        CMP.L    A1,A3
  206.         BNE.B    .Err
  207.         MOVEQ    #1,D0
  208. .out        MOVEM.L    (A7)+,D2/A2-A5
  209.         RTS
  210.  
  211. .Err        MOVE.W    #XFDERR_CORRUPTEDDATA,xfdbi_Error(A5)
  212.         MOVEQ    #0,D0
  213.         BRA.B    .out
  214.  
  215.         END
  216.